home *** CD-ROM | disk | FTP | other *** search
/ Get a Grip Tennis by Wilson / Get a Grip Tennis by Wilson.iso / pc / wilson.dxr / Internal_20_Multi-State Button.ls < prev    next >
Encoding:
Text File  |  2003-08-12  |  6.8 KB  |  220 lines

  1. property spriteNum, mySprite, myOffMember, myOffOverMember, myOffDownMember, myOffCommand, myOnMember, myOnOverMember, myOnDownMember, myOnCommand, theMouseWasUp, myRollover, myState, ourID, ourGroupList, ourMouseDown
  2.  
  3. on getBehaviorDescription me
  4.   return "MULTISTATE TOGGLE BUTTON" & RETURN & RETURN & "This behavior toggles the sprite it is attached to between two states: OFF and ON. " & "In each state, the member of the sprite is set according to the position of the mouse (elsewhere, rollover, mouseDown)." & RETURN & "The behavior returns the current state of the button in response to a #ToggleButton_State call." & RETURN & RETURN & "RADIO BUTTON GROUP" & RETURN & "To create a group of radio buttons, give each button in the same group the same ID. " & "Switching one button in the group on will switch all others off." & RETURN & RETURN & "PERMITTED MEMBER TYPES" & RETURN & "Graphic" & RETURN & RETURN & "PARAMETERS:" & RETURN & "-- OFF state --" & RETURN & "* Standard member (when mouse is elsewhere)" & RETURN & "* Rollover member" & RETURN & "* MouseDown member" & RETURN & "-- ON state --" & RETURN & "* Standard member" & RETURN & "* Rollover member" & RETURN & "* MouseDown member" & RETURN & "-- COMMAND --" & RETURN & "* Sent when the button is switched ON" & RETURN & "* Sent when the button is switched OFF" & RETURN & "-- Optional --" & RETURN & "* Toggle group ID (to create a group of radio buttons)" & RETURN & RETURN & "If members are placed consecutively in the cast in this order then default values can be used to create the button."
  5. end
  6.  
  7. on getBehaviorTooltip me
  8.   return "Create an ON/OFF button which reacts to rollovers and clicks. " & "Use several such buttons together as a radio button group."
  9. end
  10.  
  11. on beginSprite me
  12.   Initialize(me)
  13. end
  14.  
  15. on endSprite me
  16.   ourGroupList.deleteOne(me)
  17. end
  18.  
  19. on prepareFrame me
  20.   CheckForRollover(me)
  21. end
  22.  
  23. on mouseDown me
  24.   clickOn(me)
  25. end
  26.  
  27. on mouseUp me
  28.   if ourMouseDown[1] then
  29.     Toggle(me)
  30.   end if
  31. end
  32.  
  33. on mouseUpOutSide me
  34.   CheckGroupForClick(me)
  35. end
  36.  
  37. on Initialize me
  38.   mySprite = sprite(me.spriteNum)
  39.   ourGroupList = []
  40.   myOffMember = member(myOffMember)
  41.   myOffOverMember = member(myOffOverMember)
  42.   myOffDownMember = member(myOffDownMember)
  43.   myOnMember = member(myOnMember)
  44.   myOnOverMember = member(myOnOverMember)
  45.   myOnDownMember = member(myOnDownMember)
  46.   sendAllSprites(#ToggleButton_GroupRollCall, ourID, ourGroupList)
  47.   call(#ToggleButton_MouseDownList, ourGroupList, [0])
  48. end
  49.  
  50. on CheckForRollover me
  51.   mouseOverMe = the rollover = me.spriteNum
  52.   if myRollover = mouseOverMe then
  53.     if theMouseWasUp = the mouseUp then
  54.       exit
  55.     else
  56.       theMouseWasUp = the mouseUp
  57.       if mouseOverMe then
  58.         if the mouseUp then
  59.           case myState of
  60.             1:
  61.               mySprite.member = myOnOverMember
  62.             0:
  63.               mySprite.member = myOffOverMember
  64.           end case
  65.         end if
  66.       end if
  67.     end if
  68.   else
  69.     myRollover = mouseOverMe
  70.     if ourMouseDown[1] then
  71.       if myRollover then
  72.         case myState of
  73.           1:
  74.             mySprite.member = myOnDownMember
  75.           0:
  76.             mySprite.member = myOffDownMember
  77.         end case
  78.       else
  79.         case myState of
  80.           1:
  81.             mySprite.member = myOnMember
  82.           0:
  83.             mySprite.member = myOffMember
  84.         end case
  85.       end if
  86.     else
  87.       if not (the mouseDown) and myRollover then
  88.         case myState of
  89.           1:
  90.             mySprite.member = myOnOverMember
  91.           0:
  92.             mySprite.member = myOffOverMember
  93.         end case
  94.       else
  95.         case myState of
  96.           1:
  97.             mySprite.member = myOnMember
  98.           0:
  99.             mySprite.member = myOffMember
  100.         end case
  101.       end if
  102.     end if
  103.   end if
  104. end
  105.  
  106. on clickOn me
  107.   ourMouseDown[1] = 1
  108.   case myState of
  109.     1:
  110.       mySprite.member = myOnDownMember
  111.     0:
  112.       mySprite.member = myOffDownMember
  113.   end case
  114. end
  115.  
  116. on Toggle me, whichState
  117.   if voidp(whichState) then
  118.     myState = not myState
  119.   else
  120.     myState = whichState
  121.   end if
  122.   ourMouseDown[1] = 0
  123.   theMouseWasUp = 1
  124.   case myState of
  125.     1:
  126.       mySprite.member = myOnMember
  127.       updateStage()
  128.       do(myOnCommand)
  129.     0:
  130.       mySprite.member = myOffMember
  131.       updateStage()
  132.       do(myOffCommand)
  133.   end case
  134.   if ourGroupList.count() then
  135.     if myState then
  136.       call(#ToggleButton_Off, ourGroupList, me)
  137.     end if
  138.   end if
  139. end
  140.  
  141. on CheckGroupForClick me
  142.   groupRollover = call(#ToggleButton_Rollover, ourGroupList, [])
  143.   if not groupRollover.count() then
  144.     ourMouseDown[1] = 0
  145.   end if
  146. end
  147.  
  148. on ToggleButton_GroupRollCall me, groupID, groupList
  149.   if groupID = ourID then
  150.     ourGroupList = groupList
  151.     ourGroupList.append(me)
  152.   end if
  153.   return groupList
  154. end
  155.  
  156. on ToggleButton_MouseDownList me, mouseDownList
  157.   ourMouseDown = mouseDownList
  158. end
  159.  
  160. on ToggleButton_Rollover me, theList
  161.   if the rollover = me.spriteNum then
  162.     theList.append(me.spriteNum)
  163.   end if
  164.   return theList
  165. end
  166.  
  167. on ToggleButton_Off me, callingBehavior
  168.   if callingBehavior = me then
  169.     exit
  170.   end if
  171.   Toggle(me, 0)
  172. end
  173.  
  174. on ToggleButton_State me, groupID, statesList
  175.   if not voidp(groupID) then
  176.     if groupID <> ourID then
  177.       exit
  178.     end if
  179.   end if
  180.   case ilk(statesList) of
  181.     #void:
  182.       return myState
  183.     #list:
  184.       statesList.append(myState)
  185.     #propList:
  186.       statesList.addProp(me.spriteNum, myState)
  187.   end case
  188.   return statesList
  189. end
  190.  
  191. on ToggleButton_ActiveButton me, groupID, theList
  192.   if not voidp(groupID) then
  193.     if groupID <> ourID then
  194.       exit
  195.     end if
  196.   end if
  197.   if not listp(theList) then
  198.     theList = [:]
  199.   end if
  200.   if not theList.count() and myState then
  201.     theList.addProp(#sprite, me.spriteNum)
  202.     theList.addProp(#behavior, me)
  203.   end if
  204.   return theList
  205. end
  206.  
  207. on isOKToAttach me, aSpriteType, aSpriteNum
  208.   tisok = 0
  209.   if aSpriteType = #graphic then
  210.     tisok = 1
  211.   end if
  212.   return tisok
  213. end
  214.  
  215. on getPropertyDescriptionList me
  216.   theMember = sprite(the currentSpriteNum).member
  217.   theMemberNum = theMember.number
  218.   return [#myOffMember: [#comment: "-OFF STATE- Standard member:", #format: #graphic, #default: theMember], #myOffOverMember: [#comment: "Rollover member", #format: #graphic, #default: member(theMemberNum + 1)], #myOffDownMember: [#comment: "MouseDown member", #format: #graphic, #default: member(theMemberNum + 2)], #myOnMember: [#comment: "-ON STATE- Standard member", #format: #graphic, #default: member(theMemberNum + 3)], #myOnOverMember: [#comment: "Rollover member", #format: #graphic, #default: member(theMemberNum + 4)], #myOnDownMember: [#comment: "MouseDown member", #format: #graphic, #default: member(theMemberNum + 5)], #myOnCommand: [#comment: "-COMMAND SENT- when switched ON", #format: #string, #default: "sendAllSprites #Toggle_On, the currentSpriteNum"], #myOffCommand: [#comment: "when switched OFF", #format: #string, #default: "sendAllSprites #Toggle_Off, the currentSpriteNum"], #ourID: [#comment: "ID string for the group", #format: #string, #default: EMPTY]]
  219. end
  220.